package com.example.juc.sort;

import javafx.util.Pair;

import java.util.List;

/**
 * 【题目】处理一个包含英文和中文的日志文件（100G），日志编码UTF-8，每行长度均匀，均在1W字符以下，
 * 把出现频率最高的10个英文单词和出现次数打印出来，用JAVA实现，要考虑到处理性能和内存利用率；
 */
public class temp {


//    public static void main(String[] args) throws ExecutionException, InterruptedException {
//
//        ExecutorService executorService = Executors.newFixedThreadPool(5);
//
//        // 默认格式 中英文不混合
//        File file = new File("");
//        List<Future<Map<Integer, Integer>>> futureList = new ArrayList<>();
//
//
//        // 先拆成四个子文件
//        // 每个任务再按行读子文件
//
//        // 当子文件没有到末尾
//        while () {
//
//            Callable<Map<Integer, Integer>> task = new Callable<Map<Integer, Integer>>() {
//                @Override
//                public Map<Integer, Integer> call() throws Exception {
//
//                    // 统计词频
//                    Map<Integer, Integer> freq = new HashMap<>();
//                    // 简单使用哈希表
//                    // 汉字 words 汉字
//                    String line = "";
//                    String[] words = line.split(" ");
//
//                    for(int i = 0; i< words.length; i++){
//                        // 过滤中文
//                        if(!Character.isAlphabetic(words[i].charAt(0))){
//                            continue;
//                        }
//                        // 统计一行的词频
//                        freq.merge(strToInt(words[i]), 1, Integer::sum);
//                    }
//
//                    // 返回一行的结果
//                    return freq;
//                }
//            };
//
//            Future<Map<Integer, Integer>> future = executorService.submit(task);
//            futureList.add(future);
//
//        }
//
//        // 线程A 10， 8 8 8 8 8，    7
//
//        // 线程B
//
//        //
//
//        Map<Integer, Integer> ans = new HashMap<>();
//        // 合并map
//        for(int i = 0; i< futureList.size(); i++){
//             // 每个任务执行完
//             Map<Integer, Integer> temp = futureList.get(i).get();
//             // 主线程合并
//             merge(temp, ans);
//        }
//
//        // 优先队列记录前10个，队列可以固定大小10
//        PriorityQueue<Pair<Integer, Integer>> queue = new PriorityQueue<>((o1, o2) -> o2.getValue() - o1.getValue());
//
//        // 将每个单词的词频入队排序
//        for(Integer key : ans){
//           queue.add(new Pair<>(key, ans.get(key)));
//        }
//
//        // 从队列中找到前10个，再恢复字符串
//        List<Pair<String, Integer>> list = new ArrayList<>();
//
//        // 从队列中取前十个
//        for(int i = 0; i< 10; i++){
//            Pair<Integer, Integer> pair = queue.poll();
//            list.add(new Pair<>(intToStr(pair.getKey()), pair.getValue()));
//        }
//
//        // 打印结果
//        printList(list);
//
//
//    }

    private static void printList(List<Pair<String, Integer>> list) {



    }

    // 将temp
//    private static void merge(Map<Integer, Integer> temp, Map<Integer, Integer> ans) {
//
//
//
//
//    }

    // 按照对称算法恢复字符串
//    private static String intToStr(Integer key) {
//
//
//
//
//    }

    // 按照某种算法将字符串转数字
//    private static Integer strToInt(String word) {
//        // abcd
//        Integer ans = 0;
//        for(int i = 0; i< word.length(); i++){
//
//
//
//        }
//
//
//
//    }
}
